首先从整体上介绍git服务器的工作原理:多个客户端,其中可以包括仓库管理员,通过将自己的ssh公钥上传到服务器仓库keydir目录,统一调用Git专用账号git进行访问git仓库,不同的用户可以根据不同的ssh公钥校验登录,进行项目版本的各种操作,包括clone,commit,push,pull等等。
下面具体介绍Git服务器的搭建,机器环境:ubuntu12.04,Git服务器软件采用gitosis(https://github.com/res0nat0r/gitosis )。
一、软件安装
1.1 安装ssh的服务端和客户端:sudo apt-get install openssh-server openssh-client
1.2 安装git-core软件,这个是git服务的基础:sudo apt-get install git-core
1.3 安装 Gitosis,这个是git服务器软件
1 | sudo apt-get install python-setuptools |
1 | cd /tmp |
1 | git clone https://github.com/res0nat0r/gitosis.git |
1 | cd gitosis |
1 | sudo python setup.py install |
ok,软件的安装都此结束。
二、创建Git专用账号git
sudo useradd -m -s /bin/bash git //创建git账号,用户家目录默认为/home/git,shell为/bin/bash
sudo passwd git //设置git用户的密码
三、初始化Git仓库
1、初始化Git仓库需要一个管理员账号,如上图所示,管理员也是一个客户端用户,所以需要在客户端主机(我的客户端机器是Win7系统)生成一个用户,并且生成ssh-key。具体操作如下:
在客户端安装ssh服务,包括客户端和服务端。如果你的客户端系统是:
(1)Windows机器,建议直接安装git bash软件,其中包括了ssh这个服务;
(2)Linux系统,可以按照先前的命令apt-get install openssh-server openssh-client安装ssh服务。
在客户端机器我的账号是huixiao200068,在用户家目录中生成ssh-key:
(1)Windows机器,打开git bash软件,输入命令
cd ~
ssh-keygen -t rsa
(2)Linux系统,也执行以上相同的命令,即可以生成当前用户的ssh-key。
执行完成之后,输入命令:ls -al,如果出现了.ssh目录,则表示ssh-key成功创建。
2、把ssh的公钥上传到服务器,我这里假设上传到服务器的临时目录/tmp。
scp ~/.ssh/id_rsa.pub git@server:/tmp //命令中的server改成你自己服务器的IP
到此为止,仅仅只是做好了初始化仓库的准备工作,上面的2步操作都是在客户端操作的。下面是关键的第三步——初始化,该步骤在服务器端执行。
3、初始化
sudo -H -u git gitosis-init < /tmp/id_rsa.pub //将git仓库目录初始化到了git用户家目录下
此时,git用户的home目录中将出现repositories目录,该目录为git的仓库。
修改目录权限:sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update,该步骤尚不清楚其具体的作用,修改了这个目录的权限有啥用呢?望各位指教。
恭喜你,到此为止,你已经创建了一个git仓库,而且账号huixiao200068是git仓库的管理员啦。下面要做的就是仓库配置啦,管理项目和用户。
四、下载仓库配置项目gitosis-admin到本地客户端
因为git仓库的配置文件都是以git方式来管理的,所以你需要先下载一份到客户端本地 。
在你的用户目录下面创建一个临时目录work,
然后 进入到该目录:cd work,
然后执行命令:
git clone git@server:gitosis-admin.git // 命令中的server改成你自己服务器的IP
执行完成之后,work目录下会生成gitosis-admin目录,目录下面有一个gitosis.conf文件和一个keydir目录,它们将是下面配置任务的主要操作对象,请牢记它们的位置。
五、新建项目
1、修改配置文件gitosis.conf,增加如下内容。
[group first-pro] //用户组名
members = huixiao200068 //成员名,多个成员可以用空格隔开
writable = first-pro //项目名及其用户对于此项目的权限,目前是可写
2、创建项目目录 mkdir first-pro
初始化该目录 cd first-pro; git init
添加远程仓库 git remote add origin git@SERVER:first-pro.git
创建工程文件 touch 1.txt
添加工程文件到本地仓库中 git add ./1.txt
提交整个项目到本地仓库 git commit -m "comment"
提交整个项目到远程仓库 git push origin master //只有这样子,团队其他开发人员才能看到你修改的代码
查看提交日志 git log
查看本地库当前的状态,比如是否有文件需要提交。 git status
新的项目仓库已经生成,其他开发人员可以git clone 命令从服务器上下载一份工程到自己的本地机器上,协同开发啦!
六、新建用户
关于上一节最后提到的内容,“其他开发人员”,他们是需要管理员来增加和配置的,这一节主要讲怎么添加用户。
(1)客户端操作:
首先要生成ssh-key,方法和上述说明的一样。
cd ~
ssh-keygen -t rsa
然后一直回车,就OK。然后将生成的id_rsa.pub文件传给GIT服务器管理员
(2)服务器端操作:
管理员将客户上传的id_rsa.pub文件移到gitosis-admin/keydir目录中,并且改名为CLIENT_NAME.pub。注意:如果客户端如下图所示
,则CLIENT_NAME为sean@bogon,否则后续操作会出现“Repository read access denied”的错误。
给项目first-pro增加新的开发者,编辑gitosis.conf文件,vi gitosis.conf。
[group first-pro] //用户组名
members = huixiao200068 sean@bogon //成员名,多个成员可以用空格隔开
writable = first-pro //项目名及其用户对于此项目的权限,目前是可写
提交修改的管理文件:
git commit -a -m "add user sean@bogon"
git push origin master
完成上述2步之后,即可以使用该账号共同开发项目first-pro啦!
cd ~
git clone git@SERVER:first-pro.git //克隆项目到本地
…… //do anything you want to do
commit -am “comment”
commit push origin master